{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一周作业 利用线性回归技术实现共享单车数量预测---刘立君"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一、特征工程\n",
    "1、导入必要的工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np #矩阵操作\n",
    "import pandas as pd #SQL数据处理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2、加载数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "      <td>331</td>\n",
       "      <td>654</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2011-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "      <td>131</td>\n",
       "      <td>670</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2011-01-03</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "      <td>120</td>\n",
       "      <td>1229</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2011-01-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "      <td>108</td>\n",
       "      <td>1454</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2011-01-05</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>82</td>\n",
       "      <td>1518</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant      dteday  season  yr  mnth  holiday  weekday  workingday  \\\n",
       "0        1  2011-01-01       1   0     1        0        6           0   \n",
       "1        2  2011-01-02       1   0     1        0        0           0   \n",
       "2        3  2011-01-03       1   0     1        0        1           1   \n",
       "3        4  2011-01-04       1   0     1        0        2           1   \n",
       "4        5  2011-01-05       1   0     1        0        3           1   \n",
       "\n",
       "   weathersit      temp     atemp       hum  windspeed  casual  registered  \\\n",
       "0           2  0.344167  0.363625  0.805833   0.160446     331         654   \n",
       "1           2  0.363478  0.353739  0.696087   0.248539     131         670   \n",
       "2           1  0.196364  0.189405  0.437273   0.248309     120        1229   \n",
       "3           1  0.200000  0.212122  0.590435   0.160296     108        1454   \n",
       "4           1  0.226957  0.229270  0.436957   0.186900      82        1518   \n",
       "\n",
       "    cnt  \n",
       "0   985  \n",
       "1   801  \n",
       "2  1349  \n",
       "3  1562  \n",
       "4  1600  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#加载文件中数据\n",
    "path=\"C:/Users/likan/Desktop/CSVS/day.csv\"\n",
    "data=pd.read_csv(path)\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 731 entries, 0 to 730\n",
      "Data columns (total 16 columns):\n",
      "instant       731 non-null int64\n",
      "dteday        731 non-null object\n",
      "season        731 non-null int64\n",
      "yr            731 non-null int64\n",
      "mnth          731 non-null int64\n",
      "holiday       731 non-null int64\n",
      "weekday       731 non-null int64\n",
      "workingday    731 non-null int64\n",
      "weathersit    731 non-null int64\n",
      "temp          731 non-null float64\n",
      "atemp         731 non-null float64\n",
      "hum           731 non-null float64\n",
      "windspeed     731 non-null float64\n",
      "casual        731 non-null int64\n",
      "registered    731 non-null int64\n",
      "cnt           731 non-null int64\n",
      "dtypes: float64(4), int64(11), object(1)\n",
      "memory usage: 91.5+ KB\n"
     ]
    }
   ],
   "source": [
    "#查看数据信息\n",
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3、数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>366.000000</td>\n",
       "      <td>2.496580</td>\n",
       "      <td>0.500684</td>\n",
       "      <td>6.519836</td>\n",
       "      <td>0.028728</td>\n",
       "      <td>2.997264</td>\n",
       "      <td>0.683995</td>\n",
       "      <td>1.395349</td>\n",
       "      <td>0.495385</td>\n",
       "      <td>0.474354</td>\n",
       "      <td>0.627894</td>\n",
       "      <td>0.190486</td>\n",
       "      <td>848.176471</td>\n",
       "      <td>3656.172367</td>\n",
       "      <td>4504.348837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>211.165812</td>\n",
       "      <td>1.110807</td>\n",
       "      <td>0.500342</td>\n",
       "      <td>3.451913</td>\n",
       "      <td>0.167155</td>\n",
       "      <td>2.004787</td>\n",
       "      <td>0.465233</td>\n",
       "      <td>0.544894</td>\n",
       "      <td>0.183051</td>\n",
       "      <td>0.162961</td>\n",
       "      <td>0.142429</td>\n",
       "      <td>0.077498</td>\n",
       "      <td>686.622488</td>\n",
       "      <td>1560.256377</td>\n",
       "      <td>1937.211452</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.059130</td>\n",
       "      <td>0.079070</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.022392</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>22.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>183.500000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.337083</td>\n",
       "      <td>0.337842</td>\n",
       "      <td>0.520000</td>\n",
       "      <td>0.134950</td>\n",
       "      <td>315.500000</td>\n",
       "      <td>2497.000000</td>\n",
       "      <td>3152.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>366.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.498333</td>\n",
       "      <td>0.486733</td>\n",
       "      <td>0.626667</td>\n",
       "      <td>0.180975</td>\n",
       "      <td>713.000000</td>\n",
       "      <td>3662.000000</td>\n",
       "      <td>4548.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>548.500000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.655417</td>\n",
       "      <td>0.608602</td>\n",
       "      <td>0.730209</td>\n",
       "      <td>0.233214</td>\n",
       "      <td>1096.000000</td>\n",
       "      <td>4776.500000</td>\n",
       "      <td>5956.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>731.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>0.861667</td>\n",
       "      <td>0.840896</td>\n",
       "      <td>0.972500</td>\n",
       "      <td>0.507463</td>\n",
       "      <td>3410.000000</td>\n",
       "      <td>6946.000000</td>\n",
       "      <td>8714.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          instant      season          yr        mnth     holiday     weekday  \\\n",
       "count  731.000000  731.000000  731.000000  731.000000  731.000000  731.000000   \n",
       "mean   366.000000    2.496580    0.500684    6.519836    0.028728    2.997264   \n",
       "std    211.165812    1.110807    0.500342    3.451913    0.167155    2.004787   \n",
       "min      1.000000    1.000000    0.000000    1.000000    0.000000    0.000000   \n",
       "25%    183.500000    2.000000    0.000000    4.000000    0.000000    1.000000   \n",
       "50%    366.000000    3.000000    1.000000    7.000000    0.000000    3.000000   \n",
       "75%    548.500000    3.000000    1.000000   10.000000    0.000000    5.000000   \n",
       "max    731.000000    4.000000    1.000000   12.000000    1.000000    6.000000   \n",
       "\n",
       "       workingday  weathersit        temp       atemp         hum   windspeed  \\\n",
       "count  731.000000  731.000000  731.000000  731.000000  731.000000  731.000000   \n",
       "mean     0.683995    1.395349    0.495385    0.474354    0.627894    0.190486   \n",
       "std      0.465233    0.544894    0.183051    0.162961    0.142429    0.077498   \n",
       "min      0.000000    1.000000    0.059130    0.079070    0.000000    0.022392   \n",
       "25%      0.000000    1.000000    0.337083    0.337842    0.520000    0.134950   \n",
       "50%      1.000000    1.000000    0.498333    0.486733    0.626667    0.180975   \n",
       "75%      1.000000    2.000000    0.655417    0.608602    0.730209    0.233214   \n",
       "max      1.000000    3.000000    0.861667    0.840896    0.972500    0.507463   \n",
       "\n",
       "            casual   registered          cnt  \n",
       "count   731.000000   731.000000   731.000000  \n",
       "mean    848.176471  3656.172367  4504.348837  \n",
       "std     686.622488  1560.256377  1937.211452  \n",
       "min       2.000000    20.000000    22.000000  \n",
       "25%     315.500000  2497.000000  3152.000000  \n",
       "50%     713.000000  3662.000000  4548.000000  \n",
       "75%    1096.000000  4776.500000  5956.000000  \n",
       "max    3410.000000  6946.000000  8714.000000  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对数据值特征，用常用统计量观察其分布\n",
    "#（均值，标准差，最大值，最小值，分位数，中位数）\n",
    "data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "season属性的不同取值和出现的次数\n",
      "3    188\n",
      "2    184\n",
      "1    181\n",
      "4    178\n",
      "Name: season, dtype: int64\n",
      "\n",
      "mnth属性的不同取值和出现的次数\n",
      "12    62\n",
      "10    62\n",
      "8     62\n",
      "7     62\n",
      "5     62\n",
      "3     62\n",
      "1     62\n",
      "11    60\n",
      "9     60\n",
      "6     60\n",
      "4     60\n",
      "2     57\n",
      "Name: mnth, dtype: int64\n",
      "\n",
      "weathersit属性的不同取值和出现的次数\n",
      "1    463\n",
      "2    247\n",
      "3     21\n",
      "Name: weathersit, dtype: int64\n",
      "\n",
      "weekday属性的不同取值和出现的次数\n",
      "6    105\n",
      "1    105\n",
      "0    105\n",
      "5    104\n",
      "4    104\n",
      "3    104\n",
      "2    104\n",
      "Name: weekday, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "categorical_features=['season','mnth','weathersit','weekday']\n",
    "for col in categorical_features:\n",
    "    print(\"\\n%s属性的不同取值和出现的次数\"%col)\n",
    "    print(data[col].value_counts())\n",
    "    data[col]=data[col].astype('object')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4、特征处理\n",
    "因为类别特征的取值不多，可采用one hot 编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weathersit_1</th>\n",
       "      <th>weathersit_2</th>\n",
       "      <th>weathersit_3</th>\n",
       "      <th>weekday_0</th>\n",
       "      <th>weekday_1</th>\n",
       "      <th>weekday_2</th>\n",
       "      <th>weekday_3</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "0         1         0         0         0       1       0       0       0   \n",
       "1         1         0         0         0       1       0       0       0   \n",
       "2         1         0         0         0       1       0       0       0   \n",
       "3         1         0         0         0       1       0       0       0   \n",
       "4         1         0         0         0       1       0       0       0   \n",
       "\n",
       "   mnth_5  mnth_6    ...      weathersit_1  weathersit_2  weathersit_3  \\\n",
       "0       0       0    ...                 0             1             0   \n",
       "1       0       0    ...                 0             1             0   \n",
       "2       0       0    ...                 1             0             0   \n",
       "3       0       0    ...                 1             0             0   \n",
       "4       0       0    ...                 1             0             0   \n",
       "\n",
       "   weekday_0  weekday_1  weekday_2  weekday_3  weekday_4  weekday_5  weekday_6  \n",
       "0          0          0          0          0          0          0          1  \n",
       "1          1          0          0          0          0          0          0  \n",
       "2          0          1          0          0          0          0          0  \n",
       "3          0          0          1          0          0          0          0  \n",
       "4          0          0          0          1          0          0          0  \n",
       "\n",
       "[5 rows x 26 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对四个类别特征one hot 处理\n",
    "x_train_cat=data[categorical_features]\n",
    "x_train_cat=pd.get_dummies(x_train_cat)\n",
    "x_train_cat.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       temp     atemp       hum  windspeed\n",
       "0  0.355170  0.373517  0.828620   0.284606\n",
       "1  0.379232  0.360541  0.715771   0.466215\n",
       "2  0.171000  0.144830  0.449638   0.465740\n",
       "3  0.175530  0.174649  0.607131   0.284297\n",
       "4  0.209120  0.197158  0.449313   0.339143"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对数值型变量预处理\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "mn_x=MinMaxScaler()\n",
    "numerical_features=['temp','atemp','hum','windspeed']\n",
    "#标准化为0-1之间的数\n",
    "temp=mn_x.fit_transform(data[numerical_features])\n",
    "\n",
    "x_train_num=pd.DataFrame(data=temp,columns=numerical_features)\n",
    "x_train_num.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_3</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 32 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "0         1         0         0         0       1       0       0       0   \n",
       "1         1         0         0         0       1       0       0       0   \n",
       "2         1         0         0         0       1       0       0       0   \n",
       "3         1         0         0         0       1       0       0       0   \n",
       "4         1         0         0         0       1       0       0       0   \n",
       "\n",
       "   mnth_5  mnth_6     ...      weekday_3  weekday_4  weekday_5  weekday_6  \\\n",
       "0       0       0     ...              0          0          0          1   \n",
       "1       0       0     ...              0          0          0          0   \n",
       "2       0       0     ...              0          0          0          0   \n",
       "3       0       0     ...              0          0          0          0   \n",
       "4       0       0     ...              1          0          0          0   \n",
       "\n",
       "       temp     atemp       hum  windspeed  holiday  workingday  \n",
       "0  0.355170  0.373517  0.828620   0.284606        0           0  \n",
       "1  0.379232  0.360541  0.715771   0.466215        0           0  \n",
       "2  0.171000  0.144830  0.449638   0.465740        0           1  \n",
       "3  0.175530  0.174649  0.607131   0.284297        0           1  \n",
       "4  0.209120  0.197158  0.449313   0.339143        0           1  \n",
       "\n",
       "[5 rows x 32 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#将26维的类别型特征、4维的数值型特征、\n",
    "#1维的holiday、1维的workingday连起来，成为32维的特征\n",
    "x_train=pd.concat([x_train_cat,x_train_num,data['holiday'],\n",
    "                   data['workingday']],axis=1,ignore_index=False)\n",
    "x_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>yr</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 35 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant  season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  \\\n",
       "0        1         1         0         0         0       1       0       0   \n",
       "1        2         1         0         0         0       1       0       0   \n",
       "2        3         1         0         0         0       1       0       0   \n",
       "3        4         1         0         0         0       1       0       0   \n",
       "4        5         1         0         0         0       1       0       0   \n",
       "\n",
       "   mnth_4  mnth_5  ...   weekday_5  weekday_6      temp     atemp       hum  \\\n",
       "0       0       0  ...           0          1  0.355170  0.373517  0.828620   \n",
       "1       0       0  ...           0          0  0.379232  0.360541  0.715771   \n",
       "2       0       0  ...           0          0  0.171000  0.144830  0.449638   \n",
       "3       0       0  ...           0          0  0.175530  0.174649  0.607131   \n",
       "4       0       0  ...           0          0  0.209120  0.197158  0.449313   \n",
       "\n",
       "   windspeed  holiday  workingday  yr   cnt  \n",
       "0   0.284606        0           0   0   985  \n",
       "1   0.466215        0           0   0   801  \n",
       "2   0.465740        0           1   0  1349  \n",
       "3   0.284297        0           1   0  1562  \n",
       "4   0.339143        0           1   0  1600  \n",
       "\n",
       "[5 rows x 35 columns]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#拼接上instant yr cnt 原有数据，\n",
    "#将编码后的特征数据保存到新文件中Features_day.csv\n",
    "\n",
    "#instant 是记录的序号，yr是年份用于下一步数据划分，cnt用于数据训练\n",
    "TZ_train=pd.concat([data['instant'],x_train,\n",
    "                    data['yr'],data['cnt']],axis=1,ignore_index=False)\n",
    "#保存\n",
    "TZ_train.to_csv(\"C:/Users/likan/Desktop/CSVS/Features_day.csv\",\n",
    "                index=False)\n",
    "#查看前五行\n",
    "TZ_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 731 entries, 0 to 730\n",
      "Data columns (total 35 columns):\n",
      "instant         731 non-null int64\n",
      "season_1        731 non-null uint8\n",
      "season_2        731 non-null uint8\n",
      "season_3        731 non-null uint8\n",
      "season_4        731 non-null uint8\n",
      "mnth_1          731 non-null uint8\n",
      "mnth_2          731 non-null uint8\n",
      "mnth_3          731 non-null uint8\n",
      "mnth_4          731 non-null uint8\n",
      "mnth_5          731 non-null uint8\n",
      "mnth_6          731 non-null uint8\n",
      "mnth_7          731 non-null uint8\n",
      "mnth_8          731 non-null uint8\n",
      "mnth_9          731 non-null uint8\n",
      "mnth_10         731 non-null uint8\n",
      "mnth_11         731 non-null uint8\n",
      "mnth_12         731 non-null uint8\n",
      "weathersit_1    731 non-null uint8\n",
      "weathersit_2    731 non-null uint8\n",
      "weathersit_3    731 non-null uint8\n",
      "weekday_0       731 non-null uint8\n",
      "weekday_1       731 non-null uint8\n",
      "weekday_2       731 non-null uint8\n",
      "weekday_3       731 non-null uint8\n",
      "weekday_4       731 non-null uint8\n",
      "weekday_5       731 non-null uint8\n",
      "weekday_6       731 non-null uint8\n",
      "temp            731 non-null float64\n",
      "atemp           731 non-null float64\n",
      "hum             731 non-null float64\n",
      "windspeed       731 non-null float64\n",
      "holiday         731 non-null int64\n",
      "workingday      731 non-null int64\n",
      "yr              731 non-null int64\n",
      "cnt             731 non-null int64\n",
      "dtypes: float64(4), int64(5), uint8(26)\n",
      "memory usage: 70.0 KB\n"
     ]
    }
   ],
   "source": [
    "TZ_train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "二、对新数据数据集进行回归分析\n",
    "1、导入必要数据包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#引入模型：最小二乘，岭回归（L2正则），Lasso（L1正则）\n",
    "from sklearn.linear_model import LinearRegression,RidgeCV,LassoCV   \n",
    "\n",
    "#模型评估\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.metrics import r2_score #评价回归预测模型的性能\n",
    "\n",
    "#画图\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2、加载数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>yr</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 35 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant  season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  \\\n",
       "0        1         1         0         0         0       1       0       0   \n",
       "1        2         1         0         0         0       1       0       0   \n",
       "2        3         1         0         0         0       1       0       0   \n",
       "3        4         1         0         0         0       1       0       0   \n",
       "4        5         1         0         0         0       1       0       0   \n",
       "\n",
       "   mnth_4  mnth_5  ...   weekday_5  weekday_6      temp     atemp       hum  \\\n",
       "0       0       0  ...           0          1  0.355170  0.373517  0.828620   \n",
       "1       0       0  ...           0          0  0.379232  0.360541  0.715771   \n",
       "2       0       0  ...           0          0  0.171000  0.144830  0.449638   \n",
       "3       0       0  ...           0          0  0.175530  0.174649  0.607131   \n",
       "4       0       0  ...           0          0  0.209120  0.197158  0.449313   \n",
       "\n",
       "   windspeed  holiday  workingday  yr   cnt  \n",
       "0   0.284606        0           0   0   985  \n",
       "1   0.466215        0           0   0   801  \n",
       "2   0.465740        0           1   0  1349  \n",
       "3   0.284297        0           1   0  1562  \n",
       "4   0.339143        0           1   0  1600  \n",
       "\n",
       "[5 rows x 35 columns]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#读入数据\n",
    "data_tezheng=pd.read_csv(\"C:/Users/likan/Desktop/CSVS/Features_day.csv\")\n",
    "#查看数据\n",
    "data_tezheng.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3、选取训练数据及测试数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train（训练）:(365, 33)\n",
      "test（测试）:(366, 33)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda\\lib\\site-packages\\ipykernel_launcher.py:3: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n",
      "D:\\Anaconda\\lib\\site-packages\\ipykernel_launcher.py:11: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  # This is added back by InteractiveShellApp.init_path()\n"
     ]
    }
   ],
   "source": [
    "#取2011年的数据作为训练数据\n",
    "train=data_tezheng[data_tezheng.yr==0] #训练数据\n",
    "train.drop(['instant','yr'],axis=1,inplace=True)\n",
    "print(\"train（训练）:\"+str(train.shape))\n",
    "\n",
    "#取2012年的数据作为测试数据\n",
    "test=data_tezheng[data_tezheng.yr==1] #测试数据\n",
    "#取testID备份留作后用\n",
    "testID=test['instant']\n",
    "\n",
    "test.drop(['instant','yr'],axis=1,inplace=True)\n",
    "print(\"test（测试）:\"+str(test.shape))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "两年的数据相当，每天都有"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 33 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "0         1         0         0         0       1       0       0       0   \n",
       "1         1         0         0         0       1       0       0       0   \n",
       "2         1         0         0         0       1       0       0       0   \n",
       "3         1         0         0         0       1       0       0       0   \n",
       "4         1         0         0         0       1       0       0       0   \n",
       "\n",
       "   mnth_5  mnth_6  ...   weekday_4  weekday_5  weekday_6      temp     atemp  \\\n",
       "0       0       0  ...           0          0          1  0.355170  0.373517   \n",
       "1       0       0  ...           0          0          0  0.379232  0.360541   \n",
       "2       0       0  ...           0          0          0  0.171000  0.144830   \n",
       "3       0       0  ...           0          0          0  0.175530  0.174649   \n",
       "4       0       0  ...           0          0          0  0.209120  0.197158   \n",
       "\n",
       "        hum  windspeed  holiday  workingday   cnt  \n",
       "0  0.828620   0.284606        0           0   985  \n",
       "1  0.715771   0.466215        0           0   801  \n",
       "2  0.449638   0.465740        0           1  1349  \n",
       "3  0.607131   0.284297        0           1  1562  \n",
       "4  0.449313   0.339143        0           1  1600  \n",
       "\n",
       "[5 rows x 33 columns]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看训练数据\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4、准备训练数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_3</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 32 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "0         1         0         0         0       1       0       0       0   \n",
       "1         1         0         0         0       1       0       0       0   \n",
       "2         1         0         0         0       1       0       0       0   \n",
       "3         1         0         0         0       1       0       0       0   \n",
       "4         1         0         0         0       1       0       0       0   \n",
       "\n",
       "   mnth_5  mnth_6     ...      weekday_3  weekday_4  weekday_5  weekday_6  \\\n",
       "0       0       0     ...              0          0          0          1   \n",
       "1       0       0     ...              0          0          0          0   \n",
       "2       0       0     ...              0          0          0          0   \n",
       "3       0       0     ...              0          0          0          0   \n",
       "4       0       0     ...              1          0          0          0   \n",
       "\n",
       "       temp     atemp       hum  windspeed  holiday  workingday  \n",
       "0  0.355170  0.373517  0.828620   0.284606        0           0  \n",
       "1  0.379232  0.360541  0.715771   0.466215        0           0  \n",
       "2  0.171000  0.144830  0.449638   0.465740        0           1  \n",
       "3  0.175530  0.174649  0.607131   0.284297        0           1  \n",
       "4  0.209120  0.197158  0.449313   0.339143        0           1  \n",
       "\n",
       "[5 rows x 32 columns]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#取训练数据的X和y\n",
    "y_train=train['cnt'] #训练集y\n",
    "X_train=train\n",
    "X_train=X_train.drop(['cnt'],axis=1) #训练集X\n",
    "\n",
    "#取测试数据的X和y\n",
    "y_test=test['cnt'] #测试集y\n",
    "X_test=test\n",
    "X_test=X_test.drop(['cnt'],axis=1) #测试集X\n",
    "\n",
    "X_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>mnth_6</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_3</th>\n",
       "      <th>weekday_4</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>365</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.387359</td>\n",
       "      <td>0.389264</td>\n",
       "      <td>0.712082</td>\n",
       "      <td>0.350001</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>366</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.266546</td>\n",
       "      <td>0.227394</td>\n",
       "      <td>0.392086</td>\n",
       "      <td>0.633460</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>367</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.113228</td>\n",
       "      <td>0.061963</td>\n",
       "      <td>0.453728</td>\n",
       "      <td>0.707688</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>368</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.060271</td>\n",
       "      <td>0.052856</td>\n",
       "      <td>0.426306</td>\n",
       "      <td>0.334607</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>369</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.257562</td>\n",
       "      <td>0.261664</td>\n",
       "      <td>0.538989</td>\n",
       "      <td>0.221813</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 32 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  mnth_4  \\\n",
       "365         1         0         0         0       1       0       0       0   \n",
       "366         1         0         0         0       1       0       0       0   \n",
       "367         1         0         0         0       1       0       0       0   \n",
       "368         1         0         0         0       1       0       0       0   \n",
       "369         1         0         0         0       1       0       0       0   \n",
       "\n",
       "     mnth_5  mnth_6     ...      weekday_3  weekday_4  weekday_5  weekday_6  \\\n",
       "365       0       0     ...              0          0          0          0   \n",
       "366       0       0     ...              0          0          0          0   \n",
       "367       0       0     ...              0          0          0          0   \n",
       "368       0       0     ...              1          0          0          0   \n",
       "369       0       0     ...              0          1          0          0   \n",
       "\n",
       "         temp     atemp       hum  windspeed  holiday  workingday  \n",
       "365  0.387359  0.389264  0.712082   0.350001        0           0  \n",
       "366  0.266546  0.227394  0.392086   0.633460        1           0  \n",
       "367  0.113228  0.061963  0.453728   0.707688        0           1  \n",
       "368  0.060271  0.052856  0.426306   0.334607        0           1  \n",
       "369  0.257562  0.261664  0.538989   0.221813        0           1  \n",
       "\n",
       "[5 rows x 32 columns]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "y_train的均值mean_y： 3405.7616438356163\n",
      "y_train的标准差std_y： 1378.7536658345593\n",
      "标准化后的均值差异: 1.5914175510574313\n"
     ]
    }
   ],
   "source": [
    "#数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "mean_y=y_train.mean()#原数据的均值\n",
    "print(\"y_train的均值mean_y：\",mean_y)\n",
    "\n",
    "std_y=y_train.std()#原数据的标准差\n",
    "print(\"y_train的标准差std_y：\",std_y)\n",
    "\n",
    "y_train=(y_train-mean_y)/std_y#标准化后的y_train\n",
    "y_test=(y_test-mean_y)/std_y #标准化后的y_test\n",
    "\n",
    "#标准化y_test的均值\n",
    "mean_test_y=y_test.mean()\n",
    "mean_diff=mean_test_y;\n",
    "print(\"标准化后的均值差异:\",mean_diff)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "5、模型训练\n",
    "最小二乘训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集RMSE: 0.399356436887\n",
      "测试集RMSE: 0.751191567836\n"
     ]
    }
   ],
   "source": [
    "#1.生成学习器实例\n",
    "lr=LinearRegression()\n",
    "#2.在训练集上训练学习器\n",
    "lr.fit(X_train,y_train)\n",
    "\n",
    "#3.训练集测试，测试集测试\n",
    "y_train_pred=lr.predict(X_train)#训练集预测\n",
    "y_test_pred=lr.predict(X_test)#测试集预测\n",
    "y_test_pred+=mean_diff\n",
    "\n",
    "#RMSE性能测试\n",
    "rmse_train=np.sqrt(mean_squared_error(y_train,y_train_pred))#训练集上的均方误差根，衡量观测值同真值之间的偏差\n",
    "rmse_test=np.sqrt(mean_squared_error(y_test,y_test_pred))#测试集上的均方误差根，衡量观测值同真值之间的偏差\n",
    "print(\"训练集RMSE:\",rmse_train)\n",
    "print(\"测试集RMSE:\",rmse_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集r2_score: 0.840076289164\n",
      "测试集r2_score: 0.663795455599\n"
     ]
    }
   ],
   "source": [
    "#r2_score性能测试\n",
    "r2_score_train=r2_score(y_train,y_train_pred)#训练集拟合度\n",
    "r2_score_test=r2_score(y_test,y_test_pred)#测试集拟合度\n",
    "print(\"训练集r2_score:\",r2_score_train)\n",
    "print(\"测试集r2_score:\",r2_score_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "训练集上好一些，测试集上差一些\n",
    "\n",
    "岭回归模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最佳的超参alpha: 1.0\n",
      "cv of rmse: 0.434460977867\n",
      "训练集RMSE: 0.400164582436\n",
      "测试集RMSE: 0.750846482706\n",
      "训练集r2_score: 0.83942838473\n",
      "测试集r2_score: 0.664104278395\n"
     ]
    }
   ],
   "source": [
    "#1.生成学习器实例\n",
    "alphas=[0.01,0.1,1,10,100,1000]\n",
    "ridge=RidgeCV(alphas=alphas,store_cv_values=True)\n",
    "\n",
    "#2.用训练数据度模型进行训练\n",
    "ridge.fit(X_train,y_train)\n",
    "\n",
    "#通过交叉验证得到的最佳超参数alpha\n",
    "alpha=ridge.alpha_\n",
    "print(\"最佳的超参alpha:\",alpha)\n",
    "\n",
    "#交叉验证估计的测试误差\n",
    "mse_cv=np.mean(ridge.cv_values_,axis=0)\n",
    "rmse_cv=np.sqrt(mse_cv)\n",
    "print(\"cv of rmse:\",min(rmse_cv))\n",
    "\n",
    "#训练上测试，训练误差\n",
    "y_train_pred=ridge.predict(X_train)\n",
    "rmse_train=np.sqrt(mean_squared_error(y_train,y_train_pred))\n",
    "#测试上测试，测试误差\n",
    "y_test_pred = ridge.predict(X_test)\n",
    "y_test_pred+=mean_diff\n",
    "rmse_test=np.sqrt(mean_squared_error(y_test,y_test_pred))\n",
    "print(\"训练集RMSE:\",rmse_train)\n",
    "print(\"测试集RMSE:\",rmse_test)\n",
    "\n",
    "r2_score_train=r2_score(y_train,y_train_pred)#训练集拟合度\n",
    "r2_score_test=r2_score(y_test,y_test_pred)#测试集拟合度\n",
    "print(\"训练集r2_score:\",r2_score_train)\n",
    "print(\"测试集r2_score:\",r2_score_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "收取32个特征，并 消除了 0个特征\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1b29ee1da90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nlUJflLRwqQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1b29f02e358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘制重要系数\n",
    "coefs=pd.Series(ridge.coef_,index=X_train.columns)#Wj\n",
    "print(\"收取\"+str(sum(coefs!=0))+\"个特征，并 消除了\",str(sum(coefs==0))+\"个特征\")\n",
    "\n",
    "#正系数值最大的10个特征和负系数最小值(绝对值大)的10个特征\n",
    "imp_coefs=pd.concat([coefs.sort_values().head(10),coefs.sort_values().tail(10)])\n",
    "imp_coefs.plot(kind=\"barh\")\n",
    "plt.title(\"Coefficients in the Ridge Model\")\n",
    "plt.show()\n",
    "\n",
    "mse_mean=np.mean(ridge.cv_values_,axis=0)\n",
    "plt.plot(np.log10(alphas),mse_mean.reshape(len(alphas),1))\n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最佳超参alpha: 0.000582791941972\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nAe8i3+ekRXE2AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1b29f52e128>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cv of rmse: 0.661188294578\n",
      "Lasso模型收取26个特征，并 消除了 6个特征\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1b29f53aeb8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nAe8i3+ekRXE2AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1b29f5ffdd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集RMSE: 0.398771835203\n",
      "测试集RMSE: 0.748177853216\n",
      "训练集r2_scor: 0.840544158128\n",
      "测试集r2_socre: 0.66648769047\n"
     ]
    }
   ],
   "source": [
    "#生成学习器实例\n",
    "lasso=LassoCV()\n",
    "#训练\n",
    "lasso.fit(X_train,y_train)\n",
    "#超参\n",
    "alpha=lasso.alpha_\n",
    "print(\"最佳超参alpha:\",alpha)\n",
    "\n",
    "mses=np.mean(lasso.mse_path_,axis=1)\n",
    "plt.plot(np.log10(lasso.alphas_),mses)\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "\n",
    "mse_cv=np.mean(lasso.mse_path_,axis=1)\n",
    "rmse_cv=np.sqrt(mse_cv)\n",
    "print(\"cv of rmse:\",min(rmse_cv))\n",
    "\n",
    "#绘制重要系数\n",
    "coefs=pd.Series(lasso.coef_,index=X_train.columns)#Wj\n",
    "print(\"Lasso模型收取\"+str(sum(coefs!=0))+\"个特征，并 消除了\",str(sum(coefs==0))+\"个特征\")\n",
    "#正系数值最大的10个特征和负系数最小值(绝对值大)的10个特征\n",
    "imp_coefs=pd.concat([coefs.sort_values().head(10),coefs.sort_values().tail(10)])\n",
    "imp_coefs.plot(kind=\"barh\")\n",
    "plt.title(\"Coefficients in the Lasso Model\")\n",
    "plt.show()\n",
    "\n",
    "mses=np.mean(lasso.mse_path_,axis=1)\n",
    "plt.plot(np.log10(lasso.alphas_),mses)\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "\n",
    "y_train_pred=lasso.predict(X_train)\n",
    "rmse_train=np.sqrt(mean_squared_error(y_train,y_train_pred))\n",
    "print(\"训练集RMSE:\",rmse_train)\n",
    "\n",
    "y_test_pred = lasso.predict(X_test)\n",
    "y_test_pred+=mean_diff\n",
    "rmse_test = np.sqrt(mean_squared_error(y_test,y_test_pred))\n",
    "print(\"测试集RMSE:\",rmse_test)\n",
    "\n",
    "r2_score_train=r2_score(y_train,y_train_pred)\n",
    "r2_score_test=r2_score(y_test,y_test_pred)\n",
    "print(\"训练集r2_scor:\",r2_score_train)\n",
    "print(\"测试集r2_socre:\",r2_score_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "6、对测试集进行测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3405.7616438356163\n"
     ]
    }
   ],
   "source": [
    "#经过模型训练测试后，Lasso对测试集的预测效果比较好，所以采用Lasso模型对2012年人数进行预测\n",
    "y_test_pred=lasso.predict(X_test)\n",
    "y_test_pred+=mean_diff#标准化的预测值\n",
    "\n",
    "#将标准化的预测值还原\n",
    "print(mean_y)\n",
    "y_test_pred=y_test_pred * std_y + mean_y \n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 366 entries, 365 to 730\n",
      "Data columns (total 2 columns):\n",
      "instant    366 non-null int64\n",
      "pre_cnt    366 non-null float64\n",
      "dtypes: float64(1), int64(1)\n",
      "memory usage: 18.6 KB\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pre_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>365</th>\n",
       "      <td>3952.293223</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>366</th>\n",
       "      <td>3490.868943</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>367</th>\n",
       "      <td>3361.586987</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>368</th>\n",
       "      <td>3264.099113</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>369</th>\n",
       "      <td>4021.281282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>370</th>\n",
       "      <td>4205.587915</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>371</th>\n",
       "      <td>4384.007505</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>372</th>\n",
       "      <td>4124.849015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>373</th>\n",
       "      <td>3449.500474</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>374</th>\n",
       "      <td>3953.711112</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>375</th>\n",
       "      <td>3369.689187</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>376</th>\n",
       "      <td>3652.254365</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>377</th>\n",
       "      <td>3657.351622</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>378</th>\n",
       "      <td>3778.631055</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>379</th>\n",
       "      <td>3528.797487</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>380</th>\n",
       "      <td>3247.555608</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>381</th>\n",
       "      <td>3460.632947</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>382</th>\n",
       "      <td>3708.442547</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>383</th>\n",
       "      <td>3642.800602</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>384</th>\n",
       "      <td>3579.531875</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         pre_cnt\n",
       "365  3952.293223\n",
       "366  3490.868943\n",
       "367  3361.586987\n",
       "368  3264.099113\n",
       "369  4021.281282\n",
       "370  4205.587915\n",
       "371  4384.007505\n",
       "372  4124.849015\n",
       "373  3449.500474\n",
       "374  3953.711112\n",
       "375  3369.689187\n",
       "376  3652.254365\n",
       "377  3657.351622\n",
       "378  3778.631055\n",
       "379  3528.797487\n",
       "380  3247.555608\n",
       "381  3460.632947\n",
       "382  3708.442547\n",
       "383  3642.800602\n",
       "384  3579.531875"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#生成提交测试文件Sub.csv\n",
    "df=pd.DataFrame({\"instant\":testID,'pre_cnt':y_test_pred})\n",
    "df.to_csv('C:/Users/likan/Desktop/CSVS/Sub.csv')\n",
    "df.info()\n",
    "\n",
    "#查看预测结果\n",
    "df.drop(['instant'],axis=1,inplace=True)\n",
    "df.head(20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
